main.ts ➔ main   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 27
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 24
dl 0
loc 27
rs 9.304
c 0
b 0
f 0
1
import {
2
  fromArgs,
3
  fromEnv,
4
  fromPackageEnv
5
} from "./cli-utils"
6
import {
7
  parse
8
} from "./parse"
9
10
export type Reader = (path: string) => string | Buffer
11
12
const {assign: $assign} = Object
13
14
export {
15
  main,
16
  assigner
17
}
18
19
function main(
20
  env: Env,
21
  argv: string[],
22
  reader: Reader,
23
  deleteArgs: boolean
24
) {
25
  // TODO #13
26
  const patches = [
27
    fromEnv(env),
28
    fromArgs(argv, deleteArgs),
29
    fromPackageEnv(env)
30
  ]
31
  , {length} = patches
32
  , envPatch: Record<string, unknown> = {}
33
34
  for (let i = 0; i < length; i++)
35
    assigner(
36
      env, 
37
      patches[i],
38
      reader,
39
      envPatch
40
    )
41
42
  $assign(env, envPatch)
43
44
  return envPatch
45
}
46
47
function assigner(
48
  env: Readonly<Env>,
49
  files: readonly string[],
50
  reader: Reader,
51
  envPatch: Record<string, unknown>
52
) {
53
  const {length} = files
54
55
  for (let i = length; i--; )
56
    // NB commutative
57
    $assign(
58
      envPatch,
59
      parse(
60
        reader(files[i]),
61
        env,
62
        envPatch
63
      )
64
    )
65
66
  return envPatch
67
}
68